use rand::{thread_rng, Rng};
use std::cmp::Ordering;
use std::io; // use引用库。std表示默认标准库，io 提供了String类型

fn main() {
    // 循环操作
    loop {
        println!("猜测");
        println!("猜一个数字");

        // 随机数
        let mut rng = thread_rng();
        let n: u32 = rng.gen_range(0..10);
        let m: f64 = rng.gen_range(-40.0..1.3e5);
        println!("随机数{},{}", n, m);

        // mut关键字表示变量可变如下代码直接报错
        // let foo = 10;
        // foo = 10;
        let mut guess = String::new();
        // read_line读取命令行交互输入
        io::stdin().read_line(&mut guess).expect("无法读取行");
        println!("你猜的数字是：{}{}", guess, guess);

        // 同名新变量一般用在类型转化
        // let guess: u32 = guess.trim().parse().expect("请输入数字");

        // 处理错误的手段
        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num, // 正确就继续执行
            Err(_) => continue, // 错误跳过当前loop循环
        };

        // 比较
        match guess.cmp(&n) {
            Ordering::Less => println!("Less"),
            Ordering::Greater => {
                println!("Greater");
                break; // 退出loop循环
            }
            Ordering::Equal => println!("Equal"),
        }
    }
}
